<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class C_Responsavel extends MY_Controller {

	function __construct()
	{
		parent::__construct();
                $this->load->helper('html');
                $this->load->helper('url');
	}

	function index(){

            //$this->load->view('disciplina/v_busca_disciplina');
	            
	}

        function novoResponsavel(){
            
            $security = explode(',', $this->session->userdata['acessoList']);
            
            if(in_array(Regra_Const::AtualizarAluno, $security)){
                
                $_POST['parentescoList']    = $this->em->createQuery('SELECT p FROM models\parentesco p ORDER BY p.parentescoDescricao ASC');
         
                $this->load->view('aluno/p_cadastro_responsavel',$_POST);
                
            } else {
                
                $this->load->view('menu/i_erro_acesso');
            }
            
        }

        function gravarResponsavel(){
            
            $security = explode(',', $this->session->userdata['acessoList']);
            
            extract($_POST);
            
            $aluno = $this->em->find('models\aluno', $alunoId);
            
            $this->em->getConnection()->beginTransaction();
             try {
                if(in_array(Regra_Const::AtualizarAluno, $security)){
                 
                    $responsavel = new models\responsavel;
                    $enderecoResp = new models\endereco;

                    $enderecoResp->setBairro($bairroResp);
                    $enderecoResp->setCep($cepResp);
                    $enderecoResp->setCidade($cidadeResp);
                    $enderecoResp->setComplemento($complementoResp);
                    $enderecoResp->setLogradouro($logradouroResp);
                    $enderecoResp->setUf($ufResp);
                    $enderecoResp->setTipoEndereco($tipoEndereco);

                    $this->em->persist($enderecoResp);
                    $this->em->flush();

                    $responsavel->setParentescoCod($parentesco);
                    $responsavel->setProfissaoCod($profissao);
                    $responsavel->setResponsavelCpf($cpfResp);
                    $responsavel->setResponsavelDireto((int)$responsavelDireto);
                    $responsavel->setResponsavelEmail($emailResp);
                    $responsavel->setResponsavelEnderecoCod($enderecoResp->getEnderecoCod());
                    $responsavel->setResponsavelIdentidade($idtResp);
                    $responsavel->setResponsavelNome($nomeResp);
                    $responsavel->setExpedidorIdt($idtExpResp);
                    $responsavel->setAlunoId($alunoId);
                    $responsavel->setAtivo(1);

                    $this->em->persist($responsavel);
                    $this->em->flush ();

                    if($telResidencialResp){

                        $telefoneFixo = new models\telefone;
                        $telefoneFixo->setTelefoneNumero($telResidencialResp);
                        $telefoneFixo->setResponsavelCod($responsavel->getResponsavelCod());
                        $telefoneFixo->setTelefoneTipo(1);

                        $this->em->persist($telefoneFixo);
                        $this->em->flush();
                    }

                    if($celularResp){

                        $telefoneCelular = new models\telefone;
                        $telefoneCelular->setTelefoneNumero($celularResp);
                        $telefoneCelular->setResponsavelCod($responsavel->getResponsavelCod());
                        $telefoneCelular->setTelefoneTipo(2);

                        $this->em->persist($telefoneCelular);
                        $this->em->flush ();

                    }

                    if($telefoneTrabalhoResp){

                        $telefoneTrabalho = new models\telefone;
                        $telefoneTrabalho->setTelefoneNumero($telefoneTrabalhoResp);
                        $telefoneTrabalho->setResponsavelCod($responsavel->getResponsavelCod());
                        $telefoneTrabalho->setTelefoneTipo(3);

                        $this->em->persist($telefoneTrabalho);
                        $this->em->flush ();
                    }

                    if($contaResp){

                        $dadosBancarios = new models\bancario;
                        $dadosBancarios->setAgencia($agenciaResp);
                        $dadosBancarios->setBanco($bancoResp);
                        $dadosBancarios->setContaCorrente($contaResp);
                        $dadosBancarios->setDebitoAutomatico($debitoAutomatico);
                        $dadosBancarios->setResponsavel($responsavel->getResponsavelCod());

                        $this->em->persist($dadosBancarios);
                        $this->em->flush ();
                    }

                    $this->em->getConnection()->commit();

                    $queryResp = $this->em->createQuery('SELECT r FROM models\responsavel r WHERE r.ativo = 1 AND r.alunoId = ?1');
                    $queryResp->setParameter(1,$alunoId);

                    $data['responsavelList'] = $queryResp;
                    $data['alunoId'] = $alunoId;

                    $this->load->view('aluno/inc/i_dados_responsavel',$data);

                 
                } else {
                         
                     $this->load->view('menu/i_erro_acesso');

                } 

             } catch ( Exception $e ) {
                 
                 $this->em->getConnection()->rollback();
                 $this->em->close();
                 throw $e ;
            }

        }
        
        /**
         * Retorna para view o resultado do metodo getEnderecoPorCep()
         * da classe m_tools
         */
        function buscaEnderecoResponsavel(){

            $this->load->model('m_tools');
            
            extract($_POST);
            /*
             * Atribui o retorno do método getEnderecoPorCep()
             * à variável $endereco
             */
            $endereco = $this->m_tools->getEnderecoPorCep($cep);
            
            switch($endereco['resultado']){
                //Para locais onde o CEP é completo, com bairro, logradouro
                case '1':
                    $toReturn =  $endereco['resultado'].'@'.utf8_encode($endereco['logradouro']).'@'.utf8_encode($endereco['bairro']).'@'. utf8_encode($endereco['cidade']).'@'.$endereco['uf'];
                   
                    break;
                //Para locais onde o CEP é genérico
                case '2':
                    $toReturn =  $endereco['resultado'].'@'.utf8_encode($endereco['cidade']).'@'.$endereco['uf'];
                    
                    break;
            }
            //echo utf8_encode($endereco['cidade'])  ;die();
            echo $toReturn;
        }

        function detalharResponsavel(){

            extract($_POST);

            $respDireto     = array(0 => 'Não',1=>'Sim');
            $tipoEndereco   = array(0 => 'Não Informado',1 => 'Residencial',2=>'Comercial',3=>'Outro');
            
            $responsavel = $this->em->find('models\responsavel',$id);

            $profissao = $this->em->find('models\profissao',$responsavel->getProfissaoCod());
            $parentesco = $this->em->find('models\parentesco',$responsavel->getParentescoCod());

            $endereco = $this->em->find('models\endereco',$responsavel->getResponsavelEnderecoCod());

            $queryBanc = $this->em->createQuery('SELECT b FROM models\bancario b WHERE b.responsavelCod = ?1');
            $queryBanc->setParameter(1,$id);

             foreach ($queryBanc->getResult() as $dadoBancario) {

                $data['banco']          = $dadoBancario->getBanco();
                $data['conta']          = $dadoBancario->getContaCorrente();
                $data['agencia']        = $dadoBancario->getAgencia();
                $data['debAutomatico']  = $dadoBancario->getDebitoAutomatico();
             }
             
            $queryFone = $this->em->createQuery('SELECT t FROM models\telefone t WHERE t.responsavelCod = ?1');
            $queryFone->setParameter(1, $id);

            foreach ($queryFone->getResult() as $telefone) {

                if($telefone->getTelefoneTipo() == 1){

                    $data['foneFixo'] = $telefone->getTelefoneNumero();

                } else if($telefone->getTelefoneTipo() == 0){

                     $data['foneCelular'] = $telefone->getTelefoneNumero();

                } else {
                     $data['foneTrabalho'] = $telefone->getTelefoneNumero();
                }

            }

            $data['respNome']           = $responsavel->getResponsavelNome();
            $data['respDireto']         = @$responsavel->getResponsavelDireto();
            $data['respIdt']            = $responsavel->getResponsavelIdentidade();
            $data['respCpf']            = $responsavel->getResponsavelCpf();
            $data['respProfissao']      = utf8_encode($profissao->getProfissaoDesc());
            $data['respProfissaoCod']   = $responsavel->getProfissaoCod();
            $data['respParentesco']     = utf8_encode($parentesco->getParentescoDescricao());
            $data['respParentescoCod']  = $responsavel->getParentescoCod();
            $data['respEMail']          = $responsavel->getResponsavelEmail();
            $data['respExpIdt']         = $responsavel->getExpedidorIdt();
            $data['alunoId']            = $responsavel->getAlunoId();
            $data['respCod']            = $id;
            $data['respCheque']         = $responsavel->getChequeDevolvido();
            $data['respTxMaterial']     = $responsavel->getTxMaterial();
            
            $data['logradouro']         = utf8_encode($endereco->getLogradouro());
            $data['bairro']             = utf8_encode($endereco->getBairro());
            $data['cep']                = $endereco->getCep();
            $data['complemento']        = utf8_encode($endereco->getComplemento());
            $data['cidade']             = utf8_encode($endereco->getCidade());
            $data['uf']                 = $endereco->getUf();
            $data['tipoEndereco']       = $tipoEndereco[(int)$endereco->getTipoEndereco()];
            $data['tipoEnderecoCod']    = $endereco->getTipoEndereco();
            


            $this->load->view('aluno/p_info_responsavel',$data);

        }
        
        function atualizarDadosResponsavel(){
            
            $security = explode(',', $this->session->userdata['acessoList']);
            extract($_POST);

//telResidencialResp
//celularResp
//telefoneTrabalhoResp
//contaResp
//agenciaResp
//
//
//debitoAutomatico
//
//

            $responsavel = $this->em->find('models\responsavel',$responsavelCod);
            
            $endereco = $this->em->find('models\endereco',$responsavel->getResponsavelEnderecoCod());
            
            $queryBanc = $this->em->createQuery('SELECT b FROM models\bancario b WHERE b.responsavelCod = ?1');
            $queryBanc->setParameter(1,$responsavelCod);
     
            foreach ($queryBanc->getResult() as $dadoBancario) {

                $bancoCodigo = $dadoBancario->getCodigo();
            }

     
            //Abertura da transação
            $this->em->getConnection()->beginTransaction();
             try {
                  if(in_array(Regra_Const::AtualizarAluno, $security)){
                    //Atribuindo valores ao endereco
                    $endereco->setBairro(utf8_decode($bairroResp));//
                    $endereco->setCep($cepResp);//
                    $endereco->setCidade(utf8_decode($cidadeResp));//
                    $endereco->setComplemento(utf8_decode($complementoResp));//
                    $endereco->setLogradouro(utf8_decode($logradouroResp));//
                    $endereco->setTipoEndereco($tipoEndereco);
                    $endereco->setUf($ufResp);//
                    //Prepara a gravação do endereço
                    $this->em->merge($endereco);
                    $this->em->flush ();


                     //Atribuindo valores ao aluno
                    $responsavel->setResponsavelNome(utf8_decode($nomeResp));//
                    $responsavel->setResponsavelDireto($responsavelDireto);
                    $responsavel->setResponsavelIdentidade($idtResp);
                    $responsavel->setResponsavelCpf($cpfResp);
                    $responsavel->setParentescoCod($parentesco);
                    $responsavel->setProfissaoCod($profissao);
                    $responsavel->setResponsavelEmail($emailResp);
                    $responsavel->setExpedidorIdt($idtExpResp);
                    $responsavel->setTxMaterial($txMaterialAberto);
                    $responsavel->setChequeDevolvido($chequeDevolvido);


                    //Prepara a gravação do aluno
                    $this->em->merge($responsavel);
                    $this->em->flush ();

                    if($bancoResp){

                        if(!$bancoCodigo){

                            $dadoBancario = new models\bancario;
                            $controle = 1;

                        } else {

                            $dadoBancario = $this->em->find('models\bancario',$bancoCodigo);
                            $controle = 2;
                        }

                        $dadoBancario->setAgencia($agenciaResp);
                        $dadoBancario->setBanco($bancoResp);
                        $dadoBancario->setContaCorrente($contaResp);
                        $dadoBancario->setDebitoAutomatico($debitoAutomatico);
                        $dadoBancario->setResponsavel($responsavelCod);

                        if($controle == 1)
                            $this->em->persist($dadoBancario);
                        else
                            $this->em->merge($dadoBancario);

                        $this->em->flush ();
                    }


                    //Telefones do aluno
    //                if($telefone){
    //
    //                    $telefoneFixo = new models\telefone;
    //                    $telefoneFixo->setTelefoneNumero($telefone);
    //                    $telefoneFixo->setMatriculaCod($aluno->getMatricula());
    //
    //                    $this->em->merge($telefoneFixo);
    //                    $this->em->flush ();
    //                }
    //                
    //                if($celular){
    //
    //                    $telefoneCelular = new models\telefone;
    //                    $telefoneCelular->setTelefoneNumero($celular);
    //                    $telefoneCelular->setMatriculaCod($aluno->getMatricula());
    //
    //                    $this->em->merge($telefoneCelular);
    //                    $this->em->flush ();
    //                
    //                }

                    //Se não houver nenhuma exceção, é confirmada a gravação do objeto
                    $this->em->getConnection()->commit();

                     echo 1;
                 } else {
                         
                     echo 888;

                } 

             } catch ( Exception $e ) {
                 //Rollback na gravação e lançamento de exceção
                 $this->em->getConnection()->rollback();
                 $this->em->close();
                 throw $e ;
                 
                 echo 999;
            }
        }
        
        function excluirResponsavel(){
            
            $security = explode(',', $this->session->userdata['acessoList']);
            
            extract($_POST);
            
            $responsavel = $this->em->find('models\responsavel',$responsavelCod);
            
            //Abertura da transação
            $this->em->getConnection()->beginTransaction();
             try {
                if(in_array(Regra_Const::Teste, $security)){
                    $this->em->getConnection()->commit();

                     //Atribuindo valores ao endereco
                    $responsavel->setAtivo(0);//

                    //Prepara a gravação do endereço
                    $this->em->merge($responsavel);
                    $this->em->flush();

                    //Se não houver nenhuma exceção, é confirmada a gravação do objeto
                    $this->em->getConnection()->commit();

                     echo TRUE.'@'.$responsavelCod;

                 } else {

                     echo 888;
//                        $this->load->view('menu/i_erro_acesso');
                }
                

             } catch ( Exception $e ) {
                 //Rollback na gravação e lançamento de exceção
                 $this->em->getConnection()->rollback();
                 $this->em->close();
                 throw $e ;
                 
                 echo 999;
            }
            
            
        }

	
}